public class FindNthDigit {
    /**
     * 数字以0123456789101112131415…的格式序列化到一个字符序列中。
     * 在这个序列中，第5位（从下标0开始计数）是5，第13位是1，第19位是4，等等。
     * 请写一个函数，求任意第n位对应的数字。
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof
     * @param n
     * @return
     */
    public  static int findNthDigit(int n) {
        //step1 先计算n所指代的数字处于哪个区间，通过n为多少进行判断
        int end = 9;
        if (n<=9)
            return n;
        n = n-9;
        long a1 = 10; //数字个数
        int a2 = 2;//数字长度
        long result = end*a1*a2;
        while (n>=result)
        {
            n = (int) (n-result);
            a1 =10*a1;
            a2 ++;
            result = end*a1*a2;
        }
        int num = (int) (a1 +n/a2);
        int b = n%a2;
        if (b==0){
            return  Integer.valueOf(String.valueOf(num-1).charAt(a2-1)-'0');
        }
        else{
            return Integer.valueOf(String.valueOf(num).charAt(b-1)-'0');
        }




    }

    public static void main(String[] args) {
        findNthDigit(1000000000);
    }
}
